package sessionbeans;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import dtofactory.FactoryDTO;

import entities.CantidadMateriaPrima;
import entities.MateriaPrima;
import entities.PedidoFabricacion;
import entities.StockMateriaPrima;
import entitiesdto.CantidadMateriaPrimaDTO;
import entitiesdto.MateriaPrimaDTO;
import entitiesdto.StockMateriaPrimaDTO;


public @Stateless class AdminMateriaPrimaBean implements AdminMateriaPrima {

	FactoryDTO dtoFactory;
	
	@PersistenceContext
	private EntityManager manager;
	
	public AdminMateriaPrimaBean(){
		dtoFactory=FactoryDTO.getInstance();
	}
	
	@Override
	public boolean actualizarStock(CantidadMateriaPrima cmp, boolean agregar) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean generarPedidoProveedores(CantidadMateriaPrima cmp) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean verificarMateriasPrimas(PedidoFabricacion pf) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public List<StockMateriaPrimaDTO> recibirProvedores(List<StockMateriaPrimaDTO> actualizacionStock) {
		Vector<StockMateriaPrimaDTO> toreturn = new Vector<StockMateriaPrimaDTO>();
		for(StockMateriaPrimaDTO materialActualizar: actualizacionStock){
			
			//1. Verificar si ya existe la MP
			MateriaPrima mp = manager.find(MateriaPrima.class, materialActualizar.getMateriaPrima().getRef());
			if(mp==null){
				manager.persist(dtoFactory.mpFromDTO(materialActualizar.getMateriaPrima()));
			}
			//2. Verificar si ya hay materias primas			
			StockMateriaPrima actual = (StockMateriaPrima) manager.createQuery("Select StockMateriaPrima m where m.MateriaPrima=:mp").setParameter("mp", dtoFactory.mpFromDTO(materialActualizar.getMateriaPrima()));
			if(actual!=null){
				actual.setCantidad(actual.getCantidad()+materialActualizar.getCantidad());
				manager.merge(actual);
				materialActualizar.setCantidad(actual.getCantidad());
			}else{
				StockMateriaPrima newMaterial = dtoFactory.dtoToSMP(materialActualizar);
				manager.persist(newMaterial);
			}
			toreturn.add(materialActualizar);
		}
		return toreturn;
	}
}
